package formulation;

import java.util.List;

import es.deusto.ingenieria.is.csp.formulation.Constraint;
import es.deusto.ingenieria.is.csp.formulation.Variable;

public class Alldiff extends Constraint<Integer>
{

	public Alldiff(String name, List<Variable<Integer>> variables)
	{
		super(name, variables);
	}

	@Override
	public boolean isSatisfied(Variable<Integer> variable, Integer value)
	{
		for (Variable<Integer> varAux : this.getVariables()) 
		{
			if (!varAux.equals(variable) && varAux.hasValue() && varAux.getValue().equals(value))
			{
				return false;
			}
		}
		
		return true;
	}
	
	@Override
	public String toString()
	{			
		return this.getName() + ": " + this.getVariables().toString();
	}

//	public static void main(String[] args)
//	{
//		ArrayList<Integer> domain = new ArrayList<Integer>();
//		for (int i = 1; i < 10; i++)
//		{
//			domain.add(i);
//		}
//		domain.add(0);
//		
//		ArrayList<Variable<Integer>> variables = new ArrayList<Variable<Integer>>();
//		
//		variables.add(new Letra("A", domain));
//		variables.get(0).setValue(1);
//		
//		variables.add(new Letra("B", domain));
//		variables.get(1).setValue(2);
//		
//		variables.add(new Llevada("X1", domain));
//		variables.get(2).setValue(3);
//		
//		variables.add(new Letra("D", domain));
//		variables.get(3).setValue(4);
//		
//		Alldiff allDiff = new Alldiff("Alldiff", variables);
//		
//		System.out.println("Alldiff: " + allDiff.isSatisfied(new Letra("A", domain), 3));
//	}
}